package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	/*
		time包：
			1年 = 365天，day
			1天 = 24小时，hour
			1小时 = 60分钟，minute
			1分钟 = 60秒，second
			1秒钟 = 1000毫秒，millisecond
			1毫秒 = 1000微秒，microsecond ——> μs
			1微秒 = 1000纳秒，nanosecond ——> ns
			1纳秒 = 2000皮秒，picosecond ——> ps
	*/
	//1.获取当前的时间
	t1 := time.Now()
	fmt.Printf("%T\n", t1) //time.Time
	fmt.Println(t1)        //2023-05-20 13:55:10.2546736 +0800 CST m=+0.001086201

	//2.获取指定的时间
	//返回值是 time.Time 对象
	t2 := time.Date(2008, 7, 15, 16, 30, 28, 0, time.Local) //time.local是时区
	fmt.Println(t2)

	//3.time --> string 之间的转换
	//A:time --> string
	/*
		t1.Format("格式模板") ——> string
			模板的日期必须是固定的：06-1-2-15(3)-4-5 //纪念go语言诞生的时间
	*/
	s1 := t1.Format("2006年1月2日 15:04:05")
	fmt.Println(s1) //2023年5月20日 14:15:19

	s2 := t1.Format("2006-1-2--15:04:05")
	fmt.Println(s2) //2023-5-20--14:15:54
	//只想获取年月日
	s := t1.Format("2006-1-2")
	fmt.Println(s)

	//B:string --> time
	/*
		time.Parse("模板",str) --> time,err
	*/
	s3 := "1999年10月10日" //string
	t3, err := time.Parse("2006年1月2日", s3)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println(t3)        //1999-10-10 00:00:00 +0000 UTC
	fmt.Printf("%T\n", t3) //time.Time
	fmt.Println("--------------------")
	s0 := "1999-10-10" //string
	t0, err := time.Parse("2006-1-2", s0)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println(t0)        //1999-10-10 00:00:00 +0000 UTC
	fmt.Printf("%T\n", t0) //time.Time

	//4.根据当前时间，获取指定的内容
	year, month, day := t1.Date() //年，月，日
	fmt.Println(year, month, day) //2023 May 20

	hour, min, sec := t1.Clock() //时，分，秒
	fmt.Println(hour, min, sec)  //14 38 30

	year2 := t1.Year()
	fmt.Println("年：", year2)  //年： 2023
	fmt.Println(t1.YearDay()) //140 今年一共过了多少天
	fmt.Println("月", t1.Month())
	fmt.Println("日", t1.Day())
	fmt.Println("时", t1.Hour())
	fmt.Println("分钟", t1.Minute())
	fmt.Println("秒", t1.Second())
	fmt.Println("纳秒", t1.Nanosecond())

	fmt.Println("星期：", t1.Weekday()) //星期： Saturday

	//5.时间戳：指定的日期，距离 1970年1月1日0点0时0分0秒 的时间差值（秒，纳秒）
	t4 := time.Date(1970, 1, 1, 1, 0, 0, 0, time.UTC)
	timeStamp1 := t4.Unix() //秒的差值
	fmt.Println(timeStamp1) //3600
	timeStamp2 := t1.Unix()
	fmt.Println(timeStamp2)

	timeStamp3 := t4.UnixNano() //纳秒的差值
	fmt.Println(timeStamp3)
	timeStamp4 := t1.UnixNano()
	fmt.Println(timeStamp4)

	//6.时间间隔
	t5 := t1.Add(time.Minute)           //给 t1 加上 1 分钟
	fmt.Println(t1)                     //2023-05-20 15:01:20.1669861 +0800 CST m=+0.001118101
	fmt.Println(t5)                     //2023-05-20 15:02:20.1669861 +0800 CST m=+60.001118101
	fmt.Println(t1.Add(24 * time.Hour)) ////给 t1 加上 24 小时 2023-05-21 15:02:21.0442452 +0800 CST m=+86400.001634201

	t6 := t1.AddDate(1, 0, 0)
	fmt.Println(t6) //2024-05-20 15:04:04.3955999 +0800 CST

	d1 := t5.Sub(t1) //t5 - t1
	fmt.Println(d1)  //1m0s

	//7.睡眠
	time.Sleep(3 * time.Second) //让当前的程序进入睡眠状态
	fmt.Println("main...over......")

	//睡眠[1-10]的随机数
	rand.Seed(time.Now().UnixNano())
	randNum := rand.Intn(10) + 1 //int 类型的
	fmt.Println(randNum)
	time.Sleep(time.Duration(randNum) * time.Second)
	fmt.Println("睡醒了。。。")

	fmt.Printf("%T\n", t2)
}
